﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using SistemaLib.Entidades;
using SistemaLib.Gestores;
using Coolite.Ext.Web;

namespace SistemaWeb.Editores
{
    public partial class EdAsignacionTarea : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public int IdTar  
        {
            get { return int.Parse(Session["idTarea"].ToString()); }

            set { Session["idTarea"] = value; } 
        }


        public void CargarStores()
        {
            RecursosGrillaStore.DataSource = GestorRecursos.ListarRecursosAsignadosATarea(IdTar);
            RecursosGrillaStore.DataBind();
        }

        public void CargarCampos(int idTarea)
        {
            IdTar = idTarea;

            TareaToShow tar = GestorTareas.CargarTareaToShow(idTarea);

            idTB.Text = tar.Id.ToString();
            nombreTB.Text = tar.Nombre;
            PerfilTB.Text = tar.PerfilRequerido;
            SeniorityTB.Text = tar.SeniorityRequerido;
            descripcionTA.Text = tar.Descripcion;

            RecursosStore.DataSource = GestorRecursos.ListarRecursosParaComboDetallado();
            RecursosStore.DataBind();

            CargarStores();

            popupAsignacion.Show();
        }

        public void AsignarRecurso(object sender, AjaxEventArgs e)
        {
            try
            {                
                int idTar = int.Parse(idTB.Text);

                //VALIDACIONES
                if (RecursosDL.SelectedItem.Value == "")
                    throw new Exception("Debe Elegir un recurso");
                if(fechaTB.SelectedValue == null)
                    throw new Exception("Debe seleccionar una fecha de comienzo para la tarea");
                if (horasTB.Text == "")
                    throw new Exception("Debe ingresar las horas estimadas para realizar la tarea.");               
                
                int idRec = int.Parse(RecursosDL.SelectedItem.Value);
                DateTime fecha = fechaTB.SelectedDate;
                decimal horas;                
                
                if(!decimal.TryParse(horasTB.Text, out horas))
                    throw new Exception("El campo horas debe ser numerico y positivo");
                if(horas <= 0)
                    throw new Exception("El campo horas debe ser numerico y positivo.");


                
                Tarea tar = GestorTareas.CargarTareaPorId(idTar);
                Recurso rec = GestorRecursos.CargarRecursoPorId(idRec);

                if (verificarCompatibilidadCK.Checked)
                {    
                    if (tar.IdPerfilRequerido != rec.IdPerfil || tar.IdSeniorityRequerido > rec.IdSeniority)
                    {                        
                        string men = "";

                        if (tar.IdPerfilRequerido != rec.IdPerfil)
                            men += "El recurso seleccionado no posee el perfil adecuado. \n";

                        if (tar.IdSeniorityRequerido > rec.IdSeniority)
                            men += "El recurso seleccionado no posee el seniority adecuado.";


                        Ext.Msg.Show(new MessageBox.Config
                        {
                            Title = "Recurso Incompatible",
                            Message = men,
                            Buttons = MessageBox.Button.OK,
                            Icon = MessageBox.Icon.WARNING
                        });
                        return;
                    }                   
                }

                

                //ASIGNACION
                TareaAsignacion tas = new TareaAsignacion();
                tas.IdTarea = idTar;
                tas.IdRH = idRec;
                tas.FechaInicio = fecha;
                tas.Horas = horas;

                //guarda asignacion y actualiza calendario
                GestorTareaAsignacion.Guardar(tas);

                CargarStores();


                //Informacion al usuario
                string msg = String.Format("El recurso '{0}' fue asignado exitosamente a la tarea '{1}' \n Se ha Actualizado el calendario de '{0}' correspondiente a los dias necesarios para completar la tarea de {2} horas ", rec.Nombre, tar.Nombre, tas.Horas);

                Ext.Msg.Show(new MessageBox.Config
                {
                    Title = "Recurso Asignado",
                    Message = msg,
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.INFO
                });
            }
            catch (Exception ex)
            {                
                Ext.Msg.Show(new MessageBox.Config
                {
                    Title = "No se pudo realizar la Asignacion",
                    Message = ex.Message,
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.ERROR
                });
            }
        }
    }
}